"""
这个文件演示了：
1.基本函数定义和使用
2.四种参数类型：位置参数、默认参数、可变位置参数(*args)、可变关键字参数(**kwargs)
3.匿名函数(lambda)和闭包(closure)的实现
4.全局变量和局部变量的作用域区别
"""

# 1. 基本函数用法
def greet(name):
    """简单问候函数"""
    return f"Hello, {name}!"

# 2. 不同参数写法
def params_demo(a, b=2, *args, **kwargs):
    """
    a: 位置参数
    b: 默认参数
    *args: 可变位置参数
    **kwargs: 可变关键字参数
    """
    print(f"位置参数a: {a}")
    print(f"默认参数b: {b}")
    print(f"可变位置参数args: {args}")
    print(f"可变关键字参数kwargs: {kwargs}")

# 3. 匿名函数和闭包
# 匿名函数
square = lambda x: x**2

# 闭包
def outer_func(x):
    def inner_func(y):
        return x + y
    return inner_func

# 4. 局部变量和全局变量
global_var = "我是全局变量"

def scope_demo():
    local_var = "我是局部变量"
    print(f"函数内访问全局变量: {global_var}")
    print(f"函数内访问局部变量: {local_var}")

# 测试代码
if __name__ == "__main__":
    print("=== 基本函数演示 ===")
    print(greet("Alice"))
    
    print("\n=== 参数类型演示 ===")
    params_demo(1, 3, 4, 5, name="Bob", age=25)
    
    print("\n=== 匿名函数演示 ===")
    print(f"匿名函数计算结果: {square(5)}")
    
    print("\n=== 闭包演示 ===")
    closure = outer_func(10)
    print(f"闭包计算结果: {closure(5)}")
    
    print("\n=== 变量作用域演示 ===")
    scope_demo()
    try:
        print(local_var)  # 这里会报错
    except NameError:
        print("在函数外无法访问局部变量local_var")